import "reflect-metadata";

// 请求方法装饰器 《方法装饰器》
export function Get(path: string = ""): MethodDecorator {
  console.log("请求方法(方法装饰器) 装饰器");
  // target: 装饰的目标（类的原型: AppController.prototype）； propertyKey: 装饰的属性名（index）； descriptor: 装饰的属性描述符（index方法的属性描述符）
  return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
    console.log(
      "请求方法 装饰器 装饰的对象 => ",
      target,
      "\n 装饰的属性名 => ",
      propertyKey,
      "\n 装饰的属性描述符 => ",
      descriptor,
      "\n"
    );
    // 给 descriptor.value，也就是 index 方法添加元数据， path = 请求路径
    Reflect.defineMetadata("path", path, descriptor.value);
    // 等同于：descriptor.value.path = path; // 缺点就是：会污染装饰的方法（会污染index方法，在他身上添加了path属性）
    // 给 descriptor.value，也就是 index 方法添加元数据， method = "GET"，表示请求方法为 GET
    Reflect.defineMetadata("method", "GET", descriptor.value);
    // 等同于：descriptor.value.method = "GET";
  };
}
